home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 2: Applications / Linux Cubed Series 2 - Applications.iso / editors / emacs / xemacs / xemacs-1.006 / xemacs-1 / lib / xemacs-19.13 / lisp / hyperbole / hmh.el < prev    next >
Encoding:
Text File  |  1995-05-20  |  5.4 KB  |  178 lines

  1. ;;!emacs
  2. ;;
  3. ;; FILE:         hmh.el
  4. ;; SUMMARY:      Support for Hyperbole buttons in mail reader: Mh.
  5. ;; USAGE:        GNU Emacs Lisp Library
  6. ;; KEYWORDS:     hypermedia, mail
  7. ;;
  8. ;; AUTHOR:       Bob Weiner
  9. ;; ORG:          Brown U.
  10. ;;
  11. ;; ORIG-DATE:    21-May-91 at 17:06:36
  12. ;; LAST-MOD:     19-May-95 at 15:09:30 by Bob Weiner
  13. ;;
  14. ;; This file is part of Hyperbole.
  15. ;; Available for use and distribution under the same terms as GNU Emacs.
  16. ;;
  17. ;; Copyright (C) 1991-1995, Free Software Foundation, Inc.
  18. ;; Developed with support from Motorola Inc.
  19. ;;
  20. ;; DESCRIPTION:  
  21. ;; 
  22. ;;   Automatically configured for use in "hsite.el".
  23. ;;   If hsite loading fails prior to initializing Hyperbole Mh support,
  24. ;;
  25. ;;       {M-x Mh-init RTN}
  26. ;;
  27. ;;   will do it.
  28. ;;
  29. ;;
  30. ;;     Have not yet overloaded 'mh-yank-cur-msg' to yank and hide
  31. ;;   button data from mail reader buffer.
  32. ;;     Have not yet overloaded 'mh-insert-letter' to highlight buttons
  33. ;;   and to merge its button data.
  34. ;;
  35. ;; DESCRIP-END.
  36.  
  37. ;;; ************************************************************************
  38. ;;; Other required Elisp libraries
  39. ;;; ************************************************************************
  40. (require 'hmail)
  41. (load "hsmail")
  42. (require 'mh-e)
  43.  
  44. ;;; ************************************************************************
  45. ;;; Public variables
  46. ;;; ************************************************************************
  47.  
  48.  
  49. ;;; ************************************************************************
  50. ;;; Public functions
  51. ;;; ************************************************************************
  52.  
  53. (defun Mh-init ()
  54.   "Initializes Hyperbole support for Mh mail reading."
  55.   (interactive)
  56.   (setq hmail:composer  'mh-letter-mode
  57.     hmail:lister    'mh-folder-mode
  58.     hmail:modifier  'mh-letter-mode
  59.     hmail:reader    'mh-show-mode)
  60.   (var:append 'mh-show-hook '(hmail:msg-narrow Mh-hbut-highlight))
  61.   ;;
  62.   ;;
  63.   ;; Setup public abstract interface to Hyperbole defined mail
  64.   ;; reader-specific functions used in "hmail.el".
  65.   ;;
  66.   (rmail:init)
  67.   ;;
  68.   ;; Setup private abstract interface to mail reader-specific functions
  69.   ;; used in "hmail.el".
  70.   ;;
  71.   (fset 'rmail:get-new       'mh-inc-folder)
  72.   (fset 'rmail:msg-forward   'mh-redistribute)
  73.   (fset 'rmail:summ-msg-to   'mh-goto-msg)
  74.   (fset 'rmail:summ-new      'mh-rescan-folder)
  75.   (if (interactive-p)
  76.       (message "Hyperbole MH mail reader support initialized."))
  77.   )
  78.  
  79. (defun Mh-hbut-highlight ()
  80.   "Highlight any Hyperbole buttons in buffer for which display support exists."
  81.   (if (fboundp 'hproperty:but-create) (hproperty:but-create)))
  82.  
  83. (defun Mh-msg-hdrs-full (toggled)
  84.   "If TOGGLED is non-nil, toggle full/hidden headers, else show full headers.
  85. For now, a no-op."
  86.   )
  87.  
  88. (defun Mh-msg-narrow ()
  89.   "Narrows mail reader buffer to current message.
  90. This includes Hyperbole button data."
  91.   (Mh-msg-widen))
  92.  
  93. (defun Mh-msg-next ()           (mh-next-undeleted-msg 1))
  94.  
  95. (defun Mh-msg-num ()
  96.   "Returns number of mail message that point is within."
  97.   (interactive)
  98.   (mh-get-msg-num nil))
  99.  
  100. (defun Mh-msg-prev ()           (mh-previous-undeleted-msg 1))
  101.  
  102. (defun Mh-msg-to-p (mail-msg-id mail-file)
  103.   "Sets current buffer to start of msg with MAIL-MSG-ID in MAIL-FILE.
  104. Returns t if successful, else nil."
  105.   (if (not (file-readable-p mail-file))
  106.       nil
  107.     (find-file mail-file)
  108.     (hmail:msg-narrow)
  109.     (goto-char 1)
  110.     t))
  111.  
  112. (defun Mh-msg-widen ()
  113.   "Widens buffer to full current message including Hyperbole button data."
  114.   (Mh-to) (widen))
  115.  
  116. (defun Mh-to ()
  117.   "Sets current buffer to a mail reader buffer."
  118.   (and (eq major-mode 'Mh-folder-mode)
  119.        (set-buffer (Mh-get-buffer Mh-show-buffer))))
  120.  
  121. (defun Mh-Summ-delete ()        (mh-delete-msg (mh-get-msg-num t)))
  122.  
  123. (fset 'Mh-Summ-expunge          'mh-execute-commands)
  124.  
  125. (defun Mh-Summ-goto ()
  126.   (let ((msg-num (mh-get-msg-num nil)))
  127.     (mh-goto-msg msg-num nil t)
  128.     (mh-show msg-num)))
  129.  
  130. (defun Mh-Summ-to ()
  131.   "Sets current buffer to a mail listing buffer."
  132.   (let ((summ-buf))
  133.     (save-excursion
  134.       (mapcar (function
  135.         (lambda (window)
  136.           (if summ-buf
  137.               nil
  138.             (set-buffer (window-buffer window))
  139.             (if (eq major-mode 'Mh-folder-mode)
  140.             (setq summ-buf (current-buffer))))))
  141.           (hypb:window-list 'no-mini)))
  142.     (if summ-buf (set-buffer summ-buf))))
  143.  
  144. (defun Mh-Summ-undelete-all ()
  145.   (message
  146.    "(Mh-Summ-undelete-all: I don't think mh-e has an undelete operator."))
  147.  
  148. ;;; ************************************************************************
  149. ;;; Private functions
  150. ;;; ************************************************************************
  151. ;;;
  152. ;;; Overlay version of this function from mh-e.el to run mh-show-hook at end.
  153. ;;; This hook may already be run, depending on the version of mh-e you are
  154. ;;; running, but running it twice shouldn't do any harm.  Comment this out if
  155. ;;; you know that your mh-e.el already runs the hook.
  156. (hypb:function-overload 'mh-display-msg nil
  157.             '(run-hooks 'mh-show-hook))
  158.  
  159. ;;;
  160. ;;; Overlay version of 'mh-regenerate-headers' to highlight Hyperbole
  161. ;;; buttons when possible.
  162. ;;;
  163. (hypb:function-overload 'mh-regenerate-headers nil
  164.             '(if (fboundp 'hproperty:but-create)
  165.                  (hproperty:but-create)))
  166.  
  167. ;;;
  168. ;;; Set 'mh-send-letter' hook to widen to include button data before sending.
  169. ;;;
  170. (var:append 'mh-before-send-letter-hook '(widen))
  171.  
  172. ;;; ************************************************************************
  173. ;;; Private variables
  174. ;;; ************************************************************************
  175.  
  176. (provide 'hmh)
  177.  
  178.